//使用数据库
var mysql = require("mysql");

// 创建一个连接池，我们每次要发送 sql语句给mysql server都通过这个连接池来获得连接对象;
// 连接对象的有效性就有这个池来负责管理;
// 避免mysql在一段时间后，没有数据通讯的情况下会自动关闭连接通道；

//step1 创建连接池
var conn_pool = mysql.createPool({
    host:"127.0.0.1",
    poet:3306,              //默认的端口
    database:"data_test",   //数据库名
    user:"root",            //连接账号
    password:"123456"       //连接密码
})

//step2
// callback 1: err, 2, rows, 3, 每个字段的说明
// 异步,执行完后腰等回掉，不是马上就有结果。
// 异步的mysql的操作能投，提升我们的服务器的吞吐量；
function mysql_exec(sql,callback){
    // getConnection 是从这个连接池里面获得mysql的连接通道,
	// 异步获取的，如果有结果了，就会调用一个回掉函数;
	// err, 是否有错误，如果没有错误err = null, 如果成功后面conn就是我们连接池
	// 返回給我们的和mysql server 进行通讯的句柄
    conn_pool.getConnection(function(err, conn) {
		if (err) {
			if (callback) {
				callback(err, null, null);
			}
			return;
		}
        // 发送数据库的cmd到mysql server;
		// query向服务器发送sql语句的命令，有返回的话，就会调用我们的回掉函数;
		conn.query(sql, function(err, rows, fields) {
			conn.release(); // 释放链接
			
            // sql_result返回给我们的结果
			// end 

			// fields_desic 每个字段的描述
			// end 
            if (callback) {
				callback(err, rows, fields);	
			}
		});
	});
}

function optMysql(tmp = 4){
    var sql_cmd = "";
    switch(tmp){
        case 1: //查
            sql_cmd = "select * from user limit 1"; //查询一条数据
            break;
        case 2: //改
            //update 一般不关心结果  message: '(Rows matched: 6  Changed: 6  Warnings: 0',
            sql_cmd = "update user set uid = 1000001"; //设置表user字段uid 所有为1000001
            break;
        case 3: //增 
            sql_cmd = "insert into user(uname,upwd) values(\"test\",\"123456789\")";
            break;  
        case 4: //删 代码里不要删除记录，一般加一条变量，这里只是做演示
            sql_cmd = "delete from user where id = 1";
            break;      
        default:
            sql_cmd = "select * from user"; //查询全部的数据
            break;    
    }

    mysql_exec(sql_cmd, function(err, sql_result, fields_desic) {
        if (err) {
            return;
        }
        if (sql_result) {
            console.log(sql_result);	
        }
    });
}

optMysql(0);
